package org.essilab.analyzer.analyzer;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * The class Term contains all the attributes of a term.
 * @author Mohamed-Amine Chouchene, Ahcène Idinarere, Vincent Nock, Alain
 * Janin-Manificat
 */
public class Term {

    private String _title = null;

    /**
     * Return the title of the Term.
     *
     * @return String - the title of the Term.
     */
    public String getTitle() {
        return this._title;
    }

    /**
     * Set the title of the Term
     *
     * @param title String - the title of the Term.
     */
    public void setTitle(String title) {
        this._title = title;
    }
    private String _normalizedTitle = null;

    /**
     * Return the normalized title of the Term.
     *
     * @return String - the normalized title of the Term.
     */
    public String getNormalizedTitle() {
        return this._normalizedTitle;
    }

    /**
     * Set the normalized title of the Term
     *
     * @param normalizedTitle String - the normalized title of the Term.
     */
    public void setNormalizedTitle(String normalizedTitle) {
        this._normalizedTitle = normalizedTitle;
    }
    private String _createdAt = null;

    /**
     * Return the creation date of the Term.
     *
     * @return String - the creation date of the Term.
     */
    public String getCreatedAt() {
        return this._createdAt;
    }

    /**
     * Set the creation date of the Term.
     *
     * @param createdAt String - the creation date of the Term.
     */
    public void setCreatedAt(String createdAt) {
        this._createdAt = createdAt;
    }
    /*
     * private String _description = null;
     *
     * public String getDescription() { return this._description; } public void
     * setDescription(String description) { this._description = description; }
     */
    private String _lang = null;

    /**
     * Return the language of the Term.
     *
     * @return String - the language of the Term.
     */
    public String getLang() {
        return this._lang;
    }

    /**
     * Set the language of the Term.
     *
     * @param lang String - the language of the Term.
     */
    public void setLang(String lang) {
        this._lang = lang;
    }
    private List<String> _types = new ArrayList<String>();

    /**
     * Add a type in types list if it doesn't already exist.
     *
     * @param type String - a new type to add to types list.
     */
    public void setType(String type) {
        if (!this._types.contains(type)) {
            this._types.add(type);
        }
    }

    /**
     * Set the given List as the new list of types.
     *
     * @param types List<String> - the new list of types.
     */
    public void setTypes(List<String> types) {
        this._types = types;
    }

    /**
     * Return the list of types.
     *
     * @return List<String> - the list of types.
     */
    public List<String> getTypes() {
        return _types;
    }
    private List<String> _abbreviations = new ArrayList<String>();

    /**
     * Return the abbreviations of the Term.
     *
     * @return List<String> - the abbreviations of the Term.
     */
    public List<String> getAbbreviations() {
        return this._abbreviations;
    }

    /**
     * Set the abbreviations of the Term.
     *
     * @param abbreviations List<String> - the abbreviations of the Term.
     */
    public void setAbbreviations(List<String> abbreviations) {
        this._abbreviations = abbreviations;
    }
    private List<String> _vocabulary = new ArrayList<String>();

    /**
     * Return the vocabulary of the Term.
     *
     * @return List<String> - the vocabulary of the Term.
     */
    public List<String> getVocabulary() {
        return this._vocabulary;
    }

    /**
     * Set the vocabulary of the Term.
     *
     * @param vocabulary List<String> - the vocabulary of the Term.
     */
    public void setVocabulary(List<String> vocabulary) {
        this._vocabulary = vocabulary;
    }
    private List<String> _antonym = new ArrayList<String>();

    /**
     * Return the antonyms of the Term.
     *
     * @return List<String> - the antonyms of the Term.
     */
    public List<String> getAntonym() {
        return this._antonym;
    }

    /**
     * Set the antonym of the Term.
     *
     * @param antonym List<String> - the antonyms of the Term.
     */
    public void setAntonym(List<String> antonym) {
        this._antonym = antonym;
    }
    private List<String> _dimintives = new ArrayList<String>();

    /**
     * Return the dimintives of the Term.
     *
     * @return List<String> - the dimintives of the Term.
     */
    public List<String> getDimintives() {
        return this._dimintives;
    }

    /**
     * Set the dimintives of the Term.
     *
     * @param dimintives List<String> - the dimintives of the Term.
     */
    public void setDimintives(List<String> dimintives) {
        this._dimintives = dimintives;
    }
    private List<String> _related = new ArrayList<String>();

    /**
     * Return the related of the Term.
     *
     * @return List<String> - the related of the Term.
     */
    public List<String> getRelated() {
        return this._related;
    }

    /**
     * Set the related of the Term.
     *
     * @param related List<String> - the related of the Term.
     */
    public void setRelated(List<String> related) {
        this._related = related;
    }
    private List<String> _typographicalVariants = new ArrayList<String>();

    /**
     * Return the typographicalVariants of the Term.
     *
     * @return List<String> - the typographicalVariants of the Term.
     */
    public List<String> getTypographicalVariants() {
        return this._typographicalVariants;
    }

    /**
     * Set the typographicalVariants of the Term.
     *
     * @param typographicalVariants List<String> - the typographicalVariants of
     * the Term.
     */
    public void setTypographicalVariants(List<String> typographicalVariants) {
        this._typographicalVariants = typographicalVariants;
    }
    private List<String> _error = new ArrayList<String>();

    /**
     * Return the errors of the Term.
     *
     * @return List<String> - the errors of the Term.
     */
    public List<String> getError() {
        return this._error;
    }

    /**
     * Set the errors of the Term.
     *
     * @param error List<String> - the errors of the Term.
     */
    public void setError(List<String> error) {
        this._error = error;
    }
    private List<String> _holonyms = new ArrayList<String>();

    /**
     * Return the holonyms of the Term.
     *
     * @return List<String> - the holonyms of the Term.
     */
    public List<String> getHolonyms() {
        return this._holonyms;
    }

    /**
     * Set the holonyms of the Term.
     *
     * @param holonyms List<String> - the holonyms of the Term.
     */
    public void setHolonyms(List<String> holonyms) {
        this._holonyms = holonyms;
    }
    private List<String> _synonymous = new ArrayList<String>();

    /**
     * Return the synonymous of the Term.
     *
     * @return List<String> - the synonymous of the Term.
     */
    public List<String> getSynonymous() {
        return this._synonymous;
    }

    /**
     * Set the synonymous of the Term.
     *
     * @param synonymous List<String> - the synonymous of the Term.
     */
    public void setSynonymous(List<String> synonymous) {
        this._synonymous = synonymous;
    }
    private List<String> _derives = new ArrayList<String>();

    /**
     * Return the derives of the Term.
     *
     * @return List<String> - the derives of the Term.
     */
    public List<String> getDerives() {
        return this._derives;
    }

    /**
     * Set the derives of the Term.
     *
     * @param derives List<String> - the derives of the Term.
     */
    public void setDerives(List<String> derives) {
        this._derives = derives;
    }
    private List<String> _variants = new ArrayList<String>();

    /**
     * Return the variants of the Term.
     *
     * @return List<String> - the variants of the Term.
     */
    public List<String> getVariants() {
        return this._variants;
    }

    /**
     * Set the variants of the Term.
     *
     * @param variants List<String> - the variants of the Term.
     */
    public void setVariants(List<String> variants) {
        this._variants = variants;
    }
    private List<String> _meronymes = new ArrayList<String>();

    /**
     * Return the meronymes of the Term.
     *
     * @return List<String> - the meronymes of the Term.
     */
    public List<String> getMeronymes() {
        return this._meronymes;
    }

    /**
     * Set the meronymes of the Term.
     *
     * @param meronymes List<String> - the meronymes of the Term.
     */
    public void setMeronymes(List<String> meronymes) {
        this._meronymes = meronymes;
    }
    private List<String> _almostSynonymous = new ArrayList<String>();

    /**
     * Return the almostSynonymous of the Term.
     *
     * @return List<String> - the almostSynonymous of the Term.
     */
    public List<String> getAlmostSynonymous() {
        return this._almostSynonymous;
    }

    /**
     * Set the almostSynonymous of the Term.
     *
     * @param almostSynonymous List<String> - the almostSynonymous of the Term.
     */
    public void setAlmostSynonymous(List<String> almostSynonymous) {
        this._almostSynonymous = almostSynonymous;
    }
    private List<String> _troponyms = new ArrayList<String>();

    /**
     * Return the troponyms of the Term.
     *
     * @return List<String> - the troponyms of the Term.
     */
    public List<String> getTroponyms() {
        return this._troponyms;
    }

    /**
     * Set the troponyms of the Term.
     *
     * @param troponyms List<String> - the troponyms of the Term.
     */
    public void setTroponyms(List<String> troponyms) {
        this._troponyms = troponyms;
    }
    private List<String> _hyperonyms = new ArrayList<String>();

    /**
     * Return the hyperonyms of the Term.
     *
     * @return List<String> - the hyperonyms of the Term.
     */
    public List<String> getHyperonyms() {
        return this._hyperonyms;
    }

    /**
     * Set the hyperonyms of the Term.
     *
     * @param hyperonyms List<String> - the hyperonyms of the Term.
     */
    public void setHyperonyms(List<String> hyperonyms) {
        this._hyperonyms = hyperonyms;
    }
    private List<String> _hyponyms = new ArrayList<String>();

    /**
     * Return the hyponyms of the Term.
     *
     * @return List<String> - the hyponyms of the Term.
     */
    public List<String> getHyponyms() {
        return this._hyponyms;
    }

    /**
     * Set the hyponyms of the Term.
     *
     * @param hyponyms List<String> - the hyponyms of the Term.
     */
    public void setHyponyms(List<String> hyponyms) {
        this._hyponyms = hyponyms;
    }
    private List<String> _variantOrthoraphic = new ArrayList<String>();

    /**
     * Return the variantOrthoraphic of the Term.
     *
     * @return List<String> - the variantOrthoraphic of the Term.
     */
    public List<String> getVariantOrthoraphic() {
        return this._variantOrthoraphic;
    }

    /**
     * Set the variantOrthoraphic of the Term.
     *
     * @param variantOrthoraphic List<String> - the variantOrthoraphic of the Term.
     */
    public void setVariantOrthoraphic(List<String> variantOrthoraphic) {
        this._variantOrthoraphic = variantOrthoraphic;
    }
    private Map<String, List<String>> _translations = new HashMap<String, List<String>>();

    /**
     * Return the translations of the Term.
     *
     * @return List<String> - the translations of the Term.
     */
    public Map<String, List<String>> getTranslations() {
        return _translations;
    }

    /**
     * Set the translations of the Term.
     *
     * @param translations List<String> - the translations of the Term.
     */
    public void setTranslations(Map<String, List<String>> translations) {
        this._translations = translations;
    }
    private List<String> _fNoun = new ArrayList<String>();

    /**
     * Return the fNoun of the Term.
     *
     * @return List<String> - the fNoun of the Term.
     */
    public List<String> getfNoun() {
        return this._fNoun;
    }

    /**
     * Set the fNoun of the Term.
     *
     * @param fNoun List<String> - the fNoun of the Term.
     */
    public void setfNoun(List<String> fNoun) {
        this._fNoun = fNoun;
    }
    private List<String> _fLNoun = new ArrayList<String>();

    /**
     * Return the fLNoun of the Term.
     *
     * @return List<String> - the fLNoun of the Term.
     */
    public List<String> getfLNoun() {
        return this._fLNoun;
    }

    /**
     * Set the fLNoun of the Term.
     *
     * @param fLNoun List<String> - the fLNoun of the Term.
     */
    public void setfLNoun(List<String> fLNoun) {
        this._fLNoun = fLNoun;
    }
    private List<String> _fVerb = new ArrayList<String>();

    /**
     * Return the fVerb of the Term.
     *
     * @return List<String> - the fVerb of the Term.
     */
    public List<String> getfVerb() {
        return this._fVerb;
    }

    /**
     * Set the fVerb of the Term.
     *
     * @param fVerb List<String> - the fVerb of the Term.
     */
    public void setfVerb(List<String> fVerb) {
        this._fVerb = fVerb;
    }
    private List<String> _fAdj = new ArrayList<String>();

    /**
     * Return the fAdj of the Term.
     *
     * @return List<String> - the fAdj of the Term.
     */
    public List<String> getfAdj() {
        return this._fAdj;
    }

    /**
     * Set the fAdj of the Term.
     *
     * @param fAdj List<String> - the fAdj of the Term.
     */
    public void setfAdj(List<String> fAdj) {
        this._fAdj = fAdj;
    }
    private List<String> _fInterj = new ArrayList<String>();

    /**
     * Return the fInterj of the Term.
     *
     * @return List<String> - the fInterj of the Term.
     */
    public List<String> getfInterj() {
        return this._fInterj;
    }

    /**
     * Set the fInterj of the Term.
     *
     * @param fInterj List<String> - the fInterj of the Term.
     */
    public void setfInterj(List<String> fInterj) {
        this._fInterj = fInterj;
    }
    private List<String> _fLVerb = new ArrayList<String>();

    /**
     * Return the fLVerb of the Term.
     *
     * @return List<String> - the fLVerb of the Term.
     */
    public List<String> getfLVerb() {
        return this._fLVerb;
    }

    /**
     * Set the fLVerb of the Term.
     *
     * @param fLVerb List<String> - the fLVerb of the Term.
     */
    public void setfLVerb(List<String> fLVerb) {
        this._fLVerb = fLVerb;
    }
    private List<String> _fLAdv = new ArrayList<String>();

    /**
     * Return the fLAdv of the Term.
     *
     * @return List<String> - the fLAdv of the Term.
     */
    public List<String> getfLAdv() {
        return this._fLAdv;
    }

    /**
     * Set the fLAdv of the Term.
     *
     * @param fLAdv List<String> - the fLAdv of the Term.
     */
    public void setfLAdv(List<String> fLAdv) {
        this._fLAdv = fLAdv;
    }
    private List<String> _fAdjIndef = new ArrayList<String>();

    /**
     * Return the fAdjIndef of the Term.
     *
     * @return List<String> - the fAdjIndef of the Term.
     */
    public List<String> getfAdjIndef() {
        return this._fAdjIndef;
    }

    /**
     * Set the fAdjIndef of the Term.
     *
     * @param fAdjIndef List<String> - the fAdjIndef of the Term.
     */
    public void setfAdjIndef(List<String> fAdjIndef) {
        this._fAdjIndef = fAdjIndef;
    }

    @Override
    /**
     * @Return  String - the content of the term with all his attributes.
     */
    public String toString() {
        return "Term [abbreviations=" + _abbreviations
                + ", almostSynonymous=" + _almostSynonymous + ", antonym="
                + _antonym + ", createdAt=" + _createdAt + ", derives="
                + _derives + ", dimintives=" + _dimintives + ", error="
                + _error + ", fAdj=" + _fAdj + ", fAdjIndef=" + _fAdjIndef
                + ", fInterj=" + _fInterj + ", fLAdv=" + _fLAdv
                + ", fLNoun=" + _fLNoun + ", fLVerb=" + _fLVerb + ", fNoun="
                + _fNoun + ", fVerb=" + _fVerb + ", holonyms=" + _holonyms
                + ", hyperonyms=" + _hyperonyms + ", hyponyms=" + _hyponyms
                + ", lang=" + _lang + ", meronymes=" + _meronymes
                + ", normalizedTitle=" + _normalizedTitle + ", related="
                + _related + ", synonymous=" + _synonymous + ", title="
                + _title + ", translations=" + _translations + ", troponyms="
                + _troponyms + ", types=" + _types
                + ", typographicalVariants=" + _typographicalVariants
                + ", variantOrthoraphic=" + _variantOrthoraphic
                + ", variants=" + _variants + ", vocabulary=" + _vocabulary
                + "]";
    }
}
